package commands

import (
	"fmt"
	"github.com/sirupsen/logrus"
	"time"
	"wecom_rebot/common"
	"wecom_rebot/core"
	"wecom_rebot/models"
)

var xhsSyncLogger *logrus.Logger

// InitXhsSyncLogger 移除 init() 函数，改为显式初始化函数
func InitXhsSyncLogger() {
	// 确保在 common 初始化后调用
	xhsSyncLogger = core.InitLogger(common.LogsErrorMap[26])
}

func CopyInsertXhsAccount() {
	// 查询 new_open_account_record 表中 status=1 且 type=1 的 account_id
	var xhsEmails []string
	err := common.DB.Table("new_open_account_record").Where("status = ? AND type = ?", 1, 1).Pluck("account_id", &xhsEmails).Error
	if err != nil {
		xhsSyncLogger.Error("查询 new_open_account_record 数据出错: ", err)
		fmt.Println("查询 new_open_account_record 数据出错: ", err)
		return
	}

	if len(xhsEmails) == 0 {
		fmt.Println("没有修改小红书的账号")
		return
	}

	// 查询 import_xhs 表中存在于 xhsEmails 且 is_old=1 的 email
	var xhsListEmails []string
	err = common.DBDk.Table("import_xhs").Where("email IN (?) AND is_old = ?", xhsEmails, 1).Pluck("email", &xhsListEmails).Error
	if err != nil {
		xhsSyncLogger.Error("查询 import_xhs 数据出错: ", err)
		fmt.Println("查询 import_xhs 数据出错: ", err)
		return
	}

	if len(xhsListEmails) == 0 {
		fmt.Println("没有需要处理的小红书账号")
		return
	}

	// 记录日志
	xhsSyncLogger.Info("OA中存在的账户: ", xhsListEmails)

	// 更新 import_xhs 表中的记录
	// 在 Go 中无法直接使用 CONCAT 函数，需要先查询再更新
	var xhsAccounts []models.ImportXhs
	err = common.DBDk.Table("import_xhs").Where("email IN (?) AND is_old = ?", xhsListEmails, 1).Find(&xhsAccounts).Error
	if err != nil {
		xhsSyncLogger.Error("查询 import_xhs 明细数据出错: ", err)
		fmt.Println("查询 import_xhs 明细数据出错: ", err)
		return
	}

	// 批量更新 import_xhs 表
	tx := common.DBDk.Begin()
	tryRollback := true
	defer func() {
		if tryRollback {
			tx.Rollback()
		}
	}()

	for _, account := range xhsAccounts {
		remark := account.Remark
		if remark == "" {
			remark = ", 机器人开户"
		} else {
			remark += ", 机器人开户"
		}

		err = tx.Table("import_xhs").Where("email = ?", account.Email).Updates(map[string]interface{}{
			"is_robot":   3,
			"remark":     remark,
			"updated_at": time.Now().Format("2006-01-02 15:04:05"),
		}).Error

		if err != nil {
			xhsSyncLogger.Error("更新 import_xhs 数据出错: ", err)
			fmt.Println("更新 import_xhs 数据出错: ", err)
			return
		}
	}

	// 更新 new_open_account_record 表
	err = tx.Table("new_open_account_record").Where("account_id IN (?)", xhsListEmails).Updates(map[string]interface{}{
		"status":     2,
		"updated_at": time.Now().Format("2006-01-02 15:04:05"),
	}).Error

	if err != nil {
		xhsSyncLogger.Error("更新 new_open_account_record 数据出错: ", err)
		fmt.Println("更新 new_open_account_record 数据出错: ", err)
		return
	}

	// 提交事务
	err = tx.Commit().Error
	if err != nil {
		xhsSyncLogger.Error("提交事务出错: ", err)
		fmt.Println("提交事务出错: ", err)
		return
	}

	tryRollback = false
	fmt.Printf("成功处理 %d 个小红书账号\n", len(xhsListEmails))
}
